package com.zs.propertymanage.mapper;

import com.zs.propertymanage.dataObj.GeneralExtra;
import com.zs.propertymanage.dataObj.entity.Employee;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface EmployeeMapper {

    /**
     * 获取所有员工列表
     *
     * @return 所有员工列表
     */
    List<Employee> getAll();

    /**
     * 根据搜索条件获取员工列表
     *
     * @param search   搜索条件
     * @param start    分页起始位置
     * @param pageSize 分页大小
     * @return 员工列表
     */
    List<Employee> getAllWithExtra(String search, Integer start, Integer pageSize);

    /**
     * 根据搜索条件获取员工数量
     *
     * @param search   搜索条件
     * @param start    分页起始位置
     * @param pageSize 分页大小
     * @return 员工数量
     */
    Integer getCountWithCondition(String search, Integer start, Integer pageSize);

    /**
     * 获取所有员工组织关系列表
     *
     * @return 所有员工组织关系列表
     */
    List<GeneralExtra> getAllEmpOrg();

    /**
     * 获取所有员工角色关系列表
     *
     * @return 所有员工角色关系列表
     */
    List<GeneralExtra> getAllEmpRole();

    /**
     * 添加员工
     *
     * @param employee 待添加的员工信息
     * @return 添加成功时返回1，添加失败时返回0
     */
    Integer addEmployee(Employee employee);

    /**
     * 更新员工信息
     *
     * @param employee 更新的员工信息
     * @return 更新成功时返回1，更新失败时返回0
     */
    Integer updateEmployee(Employee employee);

    /**
     * 删除员工
     *
     * @param id 员工id
     * @return 删除成功时返回1，删除失败时返回0
     */
    Integer deleteEmployee(String id);

    /**
     * 删除员工角色关系
     *
     * @param id 角色关系id
     * @return 删除成功时返回1，删除失败时返回0
     */
    Integer deleteEmployeeRoleById(Integer id);

    /**
     * 添加员工角色关系
     *
     * @param roleName 待添加的角色名
     * @return 添加成功时返回1，添加失败时返回0
     */
    Integer addEmployeeRole(String roleName);

    /**
     * 删除员工组织关系
     *
     * @param id 组织关系id
     * @return 删除成功时返回1，删除失败时返回0
     */
    Integer deleteEmployeeOrgById(Integer id);

    /**
     * 添加员工组织关系
     *
     * @param orgName 待添加的组织名
     * @return 添加成功时返回1，添加失败时返回0
     */
    Integer addEmployeeOrg(String orgName);

    /**
     * 根据员工ID获取员工信息
     *
     * @param employeeId 员工ID
     * @return 员工对象
     */
    Employee getEmployeeById(String employeeId);

    /**
     * 根据角色ID获取对应的员工列表
     *
     * @param roleId 角色ID
     * @return 员工列表，其中员工信息格式根据前端要求定制，例如{value:"1-张三",label:"张三"}
     */
    List<GeneralExtra> getEmpByRoleId(Integer roleId);

    Integer getTotal();
}
